package lanqiao;

import java.util.*;

/**
 * 阶乘计算
 * http://lx.lanqiao.cn/problem.page?gpid=T71
 */
public class Basic30 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int integerBig = scanner.nextInt();

        ArrayList arrayList = save(integerBig);
        StringBuffer stringBuffer = new StringBuffer();
        for (int i = arrayList.size() - 1; i >= 0; i--) {//注意for循环，傻逼他妈的++这个狗屁错误查了半天
            stringBuffer.append(arrayList.get(i));
        }
        System.out.print(stringBuffer);


    }
    public static ArrayList save(int num){
        ArrayList<Integer> arrayListA = new ArrayList<>();
        arrayListA.add(1);//从1开始乘
        int digits = 1;//位数
        for (int i = 2; i <= num; i++) {//乘的数，注意别从0开始
            int carry = 0;//进位
            int temp ;
            for (int j = 0; j < digits; j++) {
                temp = arrayListA.get(j) * i + carry;//每个位乘以当前数加上进位即使这个位置的计算值
                arrayListA.set(j , temp % 10);//想想一个位置只能放一位，所以去最后那位其他的位要进位做后续处理
                carry = temp / 10;//进位是上面乘完之后前面的数
            }
            //这个for循环走完就只有最高位没处理了，下面的while处理最高位进位
            while (carry != 0){
                arrayListA.add(carry % 10);
                carry /= 10;
                digits++;
            }

        }
        return arrayListA;
    }
}
